package com.wandafilm.app.jetpack.frame.ui

import androidx.multidex.MultiDex
import cn.jpush.android.api.JPushInterface
import com.alibaba.android.arouter.launcher.ARouter
import com.jeremyliao.liveeventbus.LiveEventBus
import com.kotlin.android.core.CoreApp
import com.kotlin.android.core.ext.putSpValue
import com.kotlin.android.db.getAppDatabase
import com.kotlin.android.ktx.ext.KEY_JPUSH_ID
import com.kotlin.android.ktx.utils.LogUtils

/**
 *
 * Created on 2020/4/21.
 *
 * @author o.s
 */
class App : CoreApp() {

    override fun onCreate() {
        super.onCreate()
        MultiDex.install(this)
        initBus()
        getAppDatabase()
        initJPushInterface()
    }



    /**
     * 初始化极光推送
     */
    private fun initJPushInterface() {
        //极光推送
        JPushInterface.setDebugMode(LogUtils.isDebug)    // 设置开启日志,发布时请关闭日志
        JPushInterface.init(this)            // 初始化 JPush
        /**
         * 首次安装APP，rId可能会获取不到
         */
        val rId = JPushInterface.getRegistrationID(this)
        LogUtils.d("getRegistrationID-> $rId")
        if (rId.isNotEmpty()) {
            putSpValue(KEY_JPUSH_ID, rId)
        }
    }



    /**
     * 初始化LiveEventBus组件，发送消息
     * 1、配置LifecycleObserver（如Activity）接收消息的模式（默认值true）：
     * true：整个生命周期（从onCreate到onDestroy）都可以实时收到消息
     * false：激活状态（Started）可以实时收到消息，非激活状态（Stoped）无法实时收到消息，需等到Activity重新变成激活状
     * 态，方可收到消息
     * 2、autoClear
     * 配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存（默认值false）
     * 优缺点请参考LiveData
     * https://github.com/JeremyLiao/LiveEventBus/blob/master/docs/config.md
     * https://github.com/JeremyLiao/LiveEventBus
     */
    private fun initBus() {
        LiveEventBus
            .config()
            .lifecycleObserverAlwaysActive(true)
    }

    override fun onTerminate() {
        super.onTerminate()
        ARouter.getInstance().destroy()
    }

}